﻿#pragma once

#include <SFML/Graphics.hpp>
#include "../../concrete/graphic/BoardView.h"
#include "../../../domain/models/CardSet.h"
#include "../../../domain/models/Player.h"
#include "../../../domain/network/GameServer.h"
#include "../../../domain/network/PlayerClient.h"

namespace Views {
	namespace Server {
		class BoardView: public Graphic::BoardView
		{
			Domain::Network::GameServer* server; /**< Serwer gry */
			Players::Player* server_owner; /**< Gracz będący założycielem serwera */
			Players::Player* current_player; /**< Gracz, którego jest teraz tura */
			Cards::RoomsCards rooms_cards; /**< Karty pokojów */

		public:
			/**
			* @param server Serwer gry
			* @param form Główna formatka aplikacji
			* @param server_owner Gracz będący założycielem serwera
			* @param current_player Gracz, którego jest teraz tura
			*/
			BoardView(Domain::Network::GameServer* server, Utils::GUI::Form* form,
				Players::Player* server_owner, Players::Player*);
			
			/**
			* Jeśli aktualny gracz jest właścicielem serwera, otwiera okno dialogowe z wyborem pomieszczenia
			* W przeciwnym razie czeka na wiadomość od klienta którego teraz jest tura
			*/
			virtual void askForPlayerNewPosition(Players::Player*, Cards::RoomsCards);

		protected:
			/**
			* Wysyła do klientów informację o wybranym przez właściciela serwera pomieszczeniu
			*/
			virtual void onButtonClick(Cards::RoomCard*);
			/**
			* Funkcja odbierająca od serwera dane o wybranym przez jednego z klientów pomieszczeniu
			* Przesyła te dane dalej, do pozostałych klientów
			* @param player_client Klient gracza wysyłającego pakiet
			* @param packet Pakiet zawierający kartę
			*/
			virtual void onButtonClick(Domain::Network::PlayerClient* player_client, sf::Packet packet);
		};
	}
}

